#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <string.h>

#include "partido.h"
#include "utils.h"


struct partido
{
	char *idr;
 	int instancia;
 	char rama;
 	equipo_t *visitante;
	equipo_t *local;
	int	gloc;
	int	gvis;
	bool pendiente;	
};

partido_t* partido_crear(char *codigo, int instancia,char rama, equipo_t *local, equipo_t *visitante)
{
	partido_t* partido = malloc(sizeof(partido_t));
	if(!partido)
		return NULL;
		
	partido->idr = codigo;
	
	partido->instancia = instancia;
	
	partido->rama = rama;
		
	partido->local = local;
	
	partido->visitante = visitante;
	
	partido->gloc = 0;
	
	partido->gvis = 0;
	
	partido->pendiente = true;

	return partido;
}

equipo_t *partido_obtener_local(partido_t* partido)
{	
	return partido->local;	
}

equipo_t *partido_obtener_visitante(partido_t* partido)
{	
	return partido->visitante;
}

void partido_agregar_visitante(partido_t* partido,equipo_t* equipo)
{	
	partido->visitante = equipo;
}

void partido_agregar_local(partido_t* partido,equipo_t* equipo)
{	
	partido->local = equipo;	
}

void partido_agregar_resultado(partido_t *partido,int gloc,int gvis)
{	
	// Verifico si el partido esta pendiente
	if(!partido->pendiente)
		return;
	
	partido->gloc = gloc;
	partido->gvis = gvis;
	
	partido->pendiente = false;
	
	// TODO: Promocionar a un equipo
}

void partido_destruir(partido_t* partido)
{
	free(partido->idr);
	free(partido);	
}

void partido_mirar(partido_t *partido)
{
	char local[100];
	char visitante[100];
	
	if(partido->local)
		strcpy(local,equipo_obtener_pais(partido->local));
	else
		local[0] = '\0';
	
	if(partido->visitante)
		strcpy(visitante,equipo_obtener_pais(partido->visitante));
	else
		visitante[0] = '\0';
	
	printf("Partido ID=%s inst=%d rama=%c local=\"%s\" visitante=\"%s\" pend=%d\n",partido->idr,partido->instancia,partido->rama,local,visitante,partido->pendiente);
}

void partido_imprimir(partido_t *partido)
{
	equipo_t *loc = partido_obtener_local(partido);
	equipo_t *vis = partido_obtener_visitante(partido);
	
	if(!loc || !vis)
	{
		fprintf(stderr,"ERROR: loc o vis es NULL\n");
		return;
	}
	
	printf("resultado: %s:%d vs %s:%d\n",equipo_obtener_pais(loc),partido_obtener_gloc(partido),equipo_obtener_pais(vis),partido_obtener_gvis(partido));
}

bool partido_esta_pendiente(partido_t *partido)
{
	return partido->pendiente;
}

size_t partido_obtener_gloc(partido_t *partido)
{
	return partido->gloc;
}

size_t partido_obtener_gvis(partido_t *partido)
{
	return partido->gvis;
}

size_t partido_obtener_instancia(partido_t *partido)
{
	return partido->instancia;
}

char partido_obtener_rama(partido_t *partido)
{
	return partido->rama;
}
